const express = require('express')
const path = require('path')
const session  = require('express-session')
const router = require('./routes/router')
const topicRouter = require('./routes/topic')

const app = express()

// 配置接收post请求的数据，在req.body
app.use(express.urlencoded({extended: false}))
app.use(express.json())

// 配置session
app.use(session({
    // 加密字符串，可以自定义
    secret: 'blog',
    resave: false,
    // 为true的话，就无论是否使用session，默认都分配一把钥匙
    saveUninitialized: true
}))

// 配置模板字符串
app.engine('html', require('express-art-template'))

//添加拦截器
app.use((req, res, next) => {
    if(req.session.user){
      //已经登录过的用户（存在session）
    //   console.log("这个用户已经登陆：" + req.session.user.nickname);
      next();
    }else{
      //用户没有登录（session）前
      var arr = req.url.split('/');
      //去除get请求携带的参数
      for (var i = 0; i < arr.length; i++) {
          arr[i] = arr[i].split('?')[0];
      }

      //罗列所有无需权限检查的路由
      if (arr[1] === 'login' || arr[1] === 'register' || arr[1] === 'public' || arr[1] === 'favicon.ico' || arr[1] === '') {
        next()
      } else {
        //   console.log('未登录');
        //最初请求的链接也做为参数传递给login页面
        res.redirect('/login'); // 将用户重定向到登录页面
        res.end();
      }
    }
  });

// 开放public目录资源
app.use('/public/', express.static(path.join(__dirname, 'public')))

app.use(router)
app.use(topicRouter)

// 配置一个处理 404 的中间件
app.use((req, res) => {
    res.render('404.html')
})

// 配置一个全局错误处理中间件
// 有某个中间件调用了 next(err) 就会进入这个全局错误处理中间件
// 以下四个参数必须要写
app.use((err, req, res, next) => {
    res.status(500).json({
        err_code: 500,
        msg: 'Server error'
    })
})

app.listen(8888, () => {
    console.log('服务器已开启，请访问 http://localhost:8888');
})